"""
实现获取下一个排列的函数，算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列，则将数字重新排列成最小的排列（即升序排列）。

必须原地修改，只允许使用额外常数空间。

以下是一些例子，输入位于左侧列，其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
"""


class Solution:
    def nextPermutation(self, nums):
        down = 0
        flag = 0
        for i in range(len(nums) - 1, 0, -1):
            if nums[i - 1] < nums[i]:
                down = i - 1
                flag = 1
                break
        if not flag:
            nums.reverse()
            return

        for i in range(len(nums) - 1, 0, -1):
            if nums[i] > nums[down]:
                nums[i], nums[down] = nums[down], nums[i]
                last = nums[down + 1:]
                last.reverse()
                nums[down + 1:] = last
                return
